import re

import pytest
from playwright.sync_api import expect

# python中的导包路径寻找规则是：
# 以当前命令python/pytest运行的是所在目录开始寻找
# 在run.bat中规定了pytest命令在python-wright/下运行，那么导包就在如下面这样
from pom.pages.login_page import LoginPage
from pom.common.utils import AllureUtil


# conftest.py 中定义的夹具默认是局部的，只会自动引用到同一目录下的测试文件中


# session级别，全局仅运行一次，autouse=True 自动启用，它会在所以用例之前自动执行
@pytest.fixture(scope='session', autouse=True)
def test_login(browser, base_url, pytestconfig) -> None:
    username = "admin"
    password = "123456"

    # 创建登录页面对象
    context=browser.new_context(base_url=base_url)
    page=context.new_page()
    login_page = LoginPage(page)

    # 导航到登录页面，填充账号密码，并点击登录按钮
    login_page.navigate()
    login_page.fill_username(username)
    login_page.fill_password(password)
    with page.expect_navigation(url="**/xxl-job-admin/"):
        login_page.click_login_btn()

    # 保存cookie
    #获取项目的根目录
    print("项目根目录:", pytestconfig.rootpath)
    storage_path=pytestconfig.rootpath.joinpath('auth/x.json')
    context.storage_state(path=storage_path)

    # 断言
    expect(login_page.page).to_have_url(re.compile(".*/xxl-job-admin/"))
    expect(login_page.locator_index_nav).to_contain_text(username)


@pytest.fixture(scope="session", autouse=True)
def browser_context_args(browser_context_args, pytestconfig):
    storage_path=pytestconfig.rootpath.joinpath('auth/x.json')
    return {"storage_state":storage_path,**browser_context_args}